#include "Administrator.h"

Log hou_qin[REN_SHU];           //在职后勤
Vip vip[REN_SHU];               //vip     
Account account;                //收款账户

char ad_passwd[7];              //管理员密码
char ac_passwd[7] = "123456";   //进入管理账户模块密码   

size_t cnt_log;        //后勤人数
size_t cnt_vip;        //vip人数

//主菜单
void menu(void)
{
	system("clear");
	puts("*****超市交易系统*****");
    puts("|    1、后勤模块     |");
    puts("|    2、销售模块     |");
    puts("|    3、管理员模块   |");
    puts("|    4、退出系统     |");
}

// 以下是管理员菜单及功能
void ad_menu(void)
{   
	//输入密码
    char passwd[7];
	//首次登录
	if(0 == ad_passwd[0])
	{
		printf("这是您第一次登录，请设置您的密码(6位):\n");
		scanf("%s",ad_passwd);
		printf("设置成功，请重新登录！\n");
		anykey_continue();
	}
	//正常登录
	else
    {
		printf("请输入您的密码(6位):\n");
		get_passwd(passwd,sizeof(passwd));
		if(!strcmp(passwd,ad_passwd))
		{
			printf("密码正确！\n");
			anykey_continue();
	
            for(;;)
            {
                system("clear");
                puts("******管理员模块******");
                puts("|    1、管理后勤     |");
                puts("|    2、管理VIP      |");
                puts("|    3、管理收款账户 |");
                puts("|    4、退出登录     |");
				
                switch(get_cmd('1','4'))
                {
                case '1':log_manage();break;
                case '2':vip_manage();break;
                case '3':account_manage();break;
                case '4':return;
                }
            }
        }
        else
		{	
			print_sec("密码错误,请重试!",SECOND);
		}
    }
}

//后勤管理
void log_manage(void)
{
    for(;;)
    {
        system("clear");
		puts("*****后勤管理模块*****");
        puts("|    1、添加后勤     |");
        puts("|    2、删除后勤     |");
        puts("|    3、修改后勤密码 |");
        puts("|    4、遍历后勤     |");
        puts("|    5、返回上一级   |");

        switch (get_cmd('1','5'))
        {
        case '1':add_log();break;					//添加后勤
        case '2':del_log();break;					//删除后勤 
        case '3':uppsd_log();break;			//修改后勤密码
        case '4':show_log();break;					//遍历后勤
        case '5':return;
        }

    }
}

//查询后勤id
int query_log(const char* id)
{
	for(int i=0; i<cnt_log; i++)
	{
		if(!strcmp(hou_qin[i].id,id))
			return i;
	}
	return -1;
}

//添加后勤
void add_log(void)
{
	// 判断是否已满
	if(cnt_log >=REN_SHU)
	{
		print_sec("后勤人员已满，无法添加！",SECOND);
		return;
	}
	//输入后勤人员
    printf("请输入后勤人员id：");
	get_str(hou_qin[cnt_log].id,sizeof(hou_qin[cnt_log].id));
	//后勤id查询是否重复
	if(-1 < query_log(hou_qin[cnt_log].id))
	{
		print_sec("该id已存在，添加失败！",SECOND);
		return;
	}
    printf("请输入后勤人员姓名：");
    get_str(hou_qin[cnt_log].name,sizeof(hou_qin[cnt_log].name));

	printf("请设定6位密码：");
    get_str(hou_qin[cnt_log].log_passwd,sizeof(hou_qin[cnt_log].log_passwd));
	//判断密码是否6位
    if(6 != strlen(hou_qin[cnt_log].log_passwd))
  	{
    	print_sec("请输入6位密码！",SECOND);
    	return;
  	}
	hou_qin[cnt_log].lock=0;
	cnt_log++;
    print_sec("添加成功！",SECOND);
}

//删除后勤
void del_log(void)
{
	char id[20];
	printf("请输入要删除的后勤id:\n");
	get_str(id,sizeof(id));
	for(int i = 0; i<cnt_log ;i++)
	{
	    if(!strcmp(hou_qin[i].id,id) && yes_or_no())
		{
			//删除
            if(i < cnt_log-1)
			{
				hou_qin[i] = hou_qin[cnt_log-1];
			}
			cnt_log--;
            print_sec("删除成功！",SECOND);
			return;
		}
	}
	print_sec("操作失败!",SECOND);
}

//重置后勤的密码
void uppsd_log(void)
{
	char id[20];
	printf("请输入需要重置的后勤id:\n");
	get_str(id,sizeof(id));
	for(int i=0;i<cnt_log;i++)
	{
		if(!strcmp(hou_qin[i].id,id))
		{
			printf("请输入6位重置后后勤的密码:");
			char passwd[7];
			scanf("%s",passwd);
			if(6 != strlen(passwd))
  			{
    			print_sec("请输入6位密码！",SECOND);
    			return;
  			}
			strcpy(hou_qin[i].log_passwd,passwd);
			print_sec("重置成功!",SECOND);
	        hou_qin[i].lock=0;
			return;
		}
		
	}
	print_sec("操作失败!",SECOND);
	return;
}

//遍历后勤人员
void show_log(void)
{
	if(0>=cnt_log)
	{
		print_sec("当前没有后勤人员！",SECOND);
		return;
	}

	for(int i=0;i<cnt_log;i++)
	{
		printf("姓名：%-s\t ID：%-12s\t 密码(6位)：%-s\t\n",
				hou_qin[i].name,hou_qin[i].id,hou_qin[i].log_passwd);
	}
	anykey_continue();
}

//VIP管理
void vip_manage(void)
{
    for(;;)
    {
        system("clear");
		puts("*******VIP模块********");
        puts("|    1、添加VIP      |");
        puts("|    2、删除VIP      |");
        puts("|    3、修改VIP密码  |");
        puts("|    4、修改VIP信息  |");
        puts("|    5、遍历VIP      |");
        puts("|    6、返回上一级   |");

        switch (get_cmd('1','6'))
        {
        case '1':add_vip();break;					//添加VIP
        case '2':del_vip();break;					//删除VIP
        case '3':uppsd_vip();break;			        //修改VIP密码
        case '4':modify_vip();break;				//修改VIP信息
        case '5':show_vip();break;					//遍历VIP
        case '6':return;
        }
    }
}

//查询VIP电话
int query_vip(const char* phone)
{
	for(int i=0; i<cnt_vip; i++)
	{
		if(!strcmp(vip[i].phone,phone))
			return i;
	}
	return -1;
}

//添加VIP
void add_vip(void)
{
	//判断是否上限
	if(cnt_vip >=REN_SHU)
	{
		print_sec("vip已满，无法添加！",SECOND);
		return;
	}

    printf("请输入注册手机号：");
	get_str(vip[cnt_vip].phone,sizeof(vip[cnt_vip].phone));
	
	//判断手机号是否重复
	if(-1 < query_vip(vip[cnt_vip].phone))
	{
		print_sec("该手机号已存在，添加失败！",SECOND);
		return;
	}

	//判断手机号位数
	if(11 != strlen(vip[cnt_vip].phone))
  	{
    	print_sec("请输入11位手机号！",SECOND);
    	return;
  	}
    printf("请输入姓名：");
    get_str(vip[cnt_vip].name,sizeof(vip[cnt_vip].name));

	printf("请设定6位密码：");
    get_str(vip[cnt_vip].vip_passwd,sizeof(vip[cnt_vip].vip_passwd));

	//判断密码位数
	if(6 != strlen(vip[cnt_vip].vip_passwd))
  	{
    	print_sec("请输入6位密码！",SECOND);
    	return;
  	}
	cnt_vip++;
	printf("VIP余量：%d",REN_SHU-cnt_vip);
    print_sec("添加成功！",SECOND);
}

//注销VIP
void del_vip(void)
{
	printf("请输入要删除的VIP手机号:\n");
	char phone[12];
	get_str(phone,sizeof(phone));
	for(int i = 0; i<cnt_vip ;i++)
	{
	    if(!strcmp(phone,vip[i].phone)&&yes_or_no())
		{
            //删除
			if(i < cnt_vip-1)
			{
				vip[i] = vip[cnt_vip-1];
			}
			cnt_vip--;
            print_sec("删除成功！",SECOND);
			return;
		}
    }
	print_sec("操作失败!",SECOND);
}

//重置VIP的密码
void uppsd_vip(void)
{
	char phone[12];
	printf("请输入需要重置的VIP手机号:");
	get_str(phone,sizeof(phone));
	for(int i=0;i<cnt_vip;i++)
	{
		if(!strcmp(phone,vip[i].phone))
		{
			printf("请输入重置后VIP的密码(6位):");
			char passwd[7];
			scanf("%s",passwd);
			if(6 != strlen(passwd))
  			{
    			print_sec("请输入6位密码！",SECOND);
    			return;
  			}
			strcpy(vip[i].vip_passwd,passwd);
			print_sec("重置成功!",SECOND);
			return;
		}
	}
	print_sec("操作失败!",SECOND);
}

//修改VIP信息
void modify_vip(void)
{
    char phone[12];
	printf("请输入要修改的VIP手机号:\n");
	get_str(phone,sizeof(phone));
	for(int i=0;i<cnt_vip;i++)
	{
		if(!strcmp(phone,vip[i].phone))
		{
			printf("请重新输入该VIP的手机号:\n");
			scanf("%s",phone);
			if(11 != strlen(phone))
  			{
    			print_sec("请输入11位手机号！",SECOND);
    			return;
  			}
			if(-1 < query_vip(phone))
			{
				print_sec("该手机号已注册！",SECOND);
				return;
			}
			strcpy(vip[i].phone,phone);
			print_sec("修改成功!",SECOND);
			return;
		}
	}
	print_sec("操作失败!",SECOND);
}

//遍历VIP
void show_vip(void)
{
	if(0>=cnt_vip)
	{
		printf("当前没有VIP！\n");
		return;
	}
	for(int i=0;i<cnt_vip;i++)
	{
		printf("姓名：%-s\t 电话：%-12s\t 密码：%-s\t 积分：%-.2f\t\n",
					vip[i].name,vip[i].phone,vip[i].vip_passwd,vip[i].points);
	}
	anykey_continue();
	return;
}

//收款账户管理
void account_manage(void)
{
	printf("请输入密码(6位):");
	char passwd[7];
	get_passwd(passwd,sizeof(passwd));
	if(strcmp(ac_passwd,passwd))
    {
		return;
	}
	for(;;)
    {
        system("clear");
		puts("*****账户管理模块*****");
        puts("|   1、设置收款账户  |");
		puts("|   2、修改收款账户  |");
        puts("|   3、查看收款信息  |");
        puts("|   4、返回上一级    |");

        switch (get_cmd('1','4'))
        {
        case '1':set_account();break;
		case '2':change_account();break;
        case '3':msg_account();break;
        case '4':return;
        }
	}
	print_sec("密码错误!",SECOND);
}

//设置收款账户
void set_account(void)
{
	if (account.phone[0])
	{
		print_sec("已设置账户！",SECOND);
		return;
	}
	printf("请输入用于收款的支付宝账号：");
	get_str(account.phone,sizeof(account.phone));
	print_sec("设置成功！",SECOND);
}

//修改收款账户
void change_account(void)
{
  	char new_account[20];
  	printf("请输入新的收款账户：");
  	get_str(new_account,sizeof(new_account));
  	strcpy(account.phone,new_account);
  	account.cnt_msg = 0;
    print_sec("设置成功！",SECOND);
}

//查看收款信息
void msg_account(void)
{
	printf("当前收款账户为：%s\n",account.phone);
  	for (int i=0;i<account.cnt_msg;i++)
  	{
    	printf("账户%s收入%.2f元！\n",account.phone,account.money[i]);
  	}
  	anykey_continue();
}